home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-19 | 4.0 KB | 169 lines | [TEXT/MPS ] |
- /*
- * def.r -- defaulting conversion routines.
- */
-
- /*
- * DefConvert - macro for general form of defaulting conversion.
- */
- #begdef DefConvert(default, dftype, destype, converter, body)
- int default(s,df,d)
- dptr s;
- dftype df;
- destype d;
- {
- if (is:null(*s)) {
- body
- return 1;
- }
- else
- return converter(s,d); /* I really mean cnv:type */
- }
- #enddef
-
- /*
- * def_c_dbl - def:C_double(*s, df, *d), convert to C double with a
- * default value. Default is of type C double; if used, just copy to
- * destination.
- */
-
- #begdef C_DblAsgn
- *d = df;
- #enddef
-
- DefConvert(def_c_dbl, double, double *, cnv_c_dbl, C_DblAsgn)
-
- /*
- * def_c_int - def:C_integer(*s, df, *d), convert to C_integer with a
- * default value. Default type C_integer; if used, just copy to
- * destination.
- */
- #begdef C_IntAsgn
- *d = df;
- #enddef
-
- DefConvert(def_c_int, C_integer, C_integer *, cnv_c_int, C_IntAsgn)
-
- /*
- * def_c_str - def:C_string(*s, df, *d), convert to (tended) C string with
- * a default value. Default is of type "char *"; if used, point destination
- * descriptor to it.
- */
-
- #begdef C_StrAsgn
- StrLen(*d) = strlen(df);
- StrLoc(*d) = (char *)df;
- #enddef
-
- DefConvert(def_c_str, char *, dptr, cnv_c_str, C_StrAsgn)
-
- /*
- * def_cset - def:cset(*s, *df, *d), convert to cset with a default value.
- * Default is of type "struct b_cset *"; if used, point destination descriptor
- * to it.
- */
-
- #begdef CsetAsgn
- d->dword = D_Cset;
- BlkLoc(*d) = (union block *)df;
- #enddef
-
- DefConvert(def_cset, struct b_cset *, dptr, cnv_cset, CsetAsgn)
-
- /*
- * def_ec_int - def:(exact)C_integer(*s, df, *d), convert to C Integer
- * with a default value, but disallow conversions from reals. Default
- * is of type C_Integer; if used, just copy to destination.
- */
-
- #begdef EC_IntAsgn
- *d = df;
- #enddef
-
- DefConvert(def_ec_int, C_integer, C_integer *, cnv_ec_int, EC_IntAsgn)
-
- /*
- * def_eint - def:(exact)integer(*s, df, *d), convert to C_integer
- * with a default value, but disallow conversions from reals. Default
- * is of type C_Integer; if used, assign it to the destination descriptor.
- */
-
- #begdef EintAsgn
- d->dword = D_Integer;
- IntVal(*d) = df;
- #enddef
-
- DefConvert(def_eint, C_integer, dptr, cnv_eint, EintAsgn)
-
- /*
- * def_int - def:integer(*s, df, *d), convert to integer with a default
- * value. Default is of type C_integer; if used, assign it to the
- * destination descriptor.
- */
-
- #begdef IntAsgn
- d->dword = D_Integer;
- IntVal(*d) = df;
- #enddef
-
- DefConvert(def_int, C_integer, dptr, cnv_int, IntAsgn)
-
- /*
- * def_real - def:real(*s, df, *d), convert to real with a default value.
- * Default is of type double; if used, allocate real block and point
- * destination descriptor to it.
- */
-
- #begdef RealAsgn
- Protect(BlkLoc(*d) = (union block *)alcreal(df), fatalerr(0,NULL));
- d->dword = D_Real;
- #enddef
-
- DefConvert(def_real, double, dptr, cnv_real, RealAsgn)
-
- /*
- * def_str - def:string(*s, *df, *d), convert to string with a default
- * value. Default is of type "struct descrip *"; if used, copy the
- * decriptor value to the destination.
- */
-
- #begdef StrAsgn
- *d = *df;
- #enddef
-
- DefConvert(def_str, dptr, dptr, cnv_str, StrAsgn)
-
- /*
- * def_tcset - def:tmp_cset(*s, *df, *d), conversion to temporary cset with
- * a default value. Default is of type "struct b_cset *"; if used,
- * point destination descriptor to it. Note that this routine needs
- * a cset buffer (cset block) to perform an actual conversion.
- */
- int def_tcset(cbuf, s, df, d)
- struct b_cset *cbuf, *df;
- dptr s, d;
- {
- if (is:null(*s)) {
- d->dword = D_Cset;
- BlkLoc(*d) = (union block *)df;
- return 1;
- }
- return cnv_tcset(cbuf, s, d);
- }
-
- /*
- * def_tstr - def:tmp_string(*s, *df, *d), conversion to temporary string
- * with a default value. Default is of type "struct descrip *"; if used,
- * copy it to destination descriptor. Note that this routine needs
- * a string buffer to perform an actual conversion.
- */
- int def_tstr(sbuf, s, df, d)
- char *sbuf;
- dptr s, df, d;
- {
- if (is:null(*s)) {
- *d = *df;
- return 1;
- }
- return cnv_tstr(sbuf, s, d);
- }
-